package com.ztr.sendqq.api;

import com.ztr.sendqq.config.EmailBean;
import com.ztr.sendqq.utils.EmailUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.context.Context;

import java.util.ArrayList;
import java.util.List;

@RestController
@AllArgsConstructor
@RequestMapping("/api")
@Api(tags = "实例演示-发送邮件")
public class ApiEmailController {

    private final EmailUtil emailUtil;

    /**
     * 通过POST请求发送带有纯文本和附件的电子邮件。
     * <p>
     * 此方法专门用于发送包含纯文本内容和附件的电子邮件。通过指定的文本内容、主题和收件人，
     * 使用邮件工具类将邮件发送到指定的电子邮件地址。
     *
     * @param text 邮件的纯文本内容。
     */
    @PostMapping("/sendEmailText")
    @ApiOperation(value = "发送纯文本带附件的邮件")
    public void sendEmailText(String text) {
        // 初始化附件列表
        List<String> attachmentList = new ArrayList<>();
        // 添加一个本地文件路径作为附件
        attachmentList.add("D:\\workspace\\javacode\\RuoYi-Vue3\\src\\assets\\images\\liuyifei.jpg");
        // 添加一个资源文件路径作为附件
        attachmentList.add("src/main/resources/templates/email.html");

        // 构建邮件 bean，设置文本内容、主题、收件人和附件列表
        EmailBean emailBean = EmailBean.builder()
                .text(text)
                .subject("QQ邮箱纯文本带附件信息发送")
                .toUser("1679908874@qq.com")
                .attachmentList(attachmentList)
                .build();

        // 调用邮件工具类发送构建好的邮件
        emailUtil.sendEmail(emailBean);
    }

    /**
     * 根据HTML模板发送验证码邮件。
     * 该方法通过生成一个随机的6位验证码，并将其嵌入到邮件模板中，然后发送给指定的邮箱。
     * 使用Swagger的ApiOperation注解来说明该方法的作用和用途。
     */
    @GetMapping("/sendEmailTemplate")
    @ApiOperation(value = "根据html模板发送验证码邮件")
    public void sendEmailTemplate() {
        // 创建一个上下文对象，用于存储模板中使用的变量
        Context context = new Context();
        // 设置上下文中的项目名称变量
        context.setVariable("project", "登录验证码");
        // 生成一个6位数的随机验证码
        String code = String.valueOf((int) (Math.random() * 900000 + 100000));
        // 设置上下文中的验证码变量
        context.setVariable("code", code);
        // 构建EmailBean对象，包含邮件的上下文、模板名称、主题和收件人等信息
        EmailBean emailBean = EmailBean.builder()
                .context(context)
                .templateName("email")
                .subject("发送验证码")
                .toUser("1217231242@qq.com")
                .build();
        // 调用邮件发送工具类，发送构建好的邮件
        emailUtil.sendEmail(emailBean);
        System.out.println(code);
    }
}